/**
 * Created by awebone on 2017/8/17.
 */

var express=require('express');

var User=require('../models/User');
var Category=require('../models/Category');
var Content=require('../models/Content');

var router=express.Router();

router.use(function (req, res, next) {
    if (! req.userInfo.isAdmin){
        //如果当前用户是非管理员
        res.send('对不起，只有管理员才可以进入');
    }
    next();
});


//首页
router.get('/',function (req, res) {
    res.render('admin/index',{
        userInfo:req.userInfo
    });
});

//用户管理
router.get('/user',function (req, res) {
    /*从数据库中读取所有的用户数据
    * limit(Number):限制获取的数据条数
    * skip(Number):忽略数据的条数
    * count():计算总数
    *
    * 每页显示2条
    * 1：1-2  skip0
    * 2：3-4  skip2
    * (当前页-1)*limit
    * */

    var page=Number(req.query.page ||1);
    var limit=10;
    var skip=(page-1)*limit;
    var pages=0;

    User.count().then(function (count) {
        //计算总页数
        pages=Math.ceil(count/limit);
        //取值不能超过pages，page大于pages取pages
        page=Math.min(page,pages);
        //取值不能小于1,page小于1取1
        page=Math.max(page,1);

        User.find().limit(limit).skip(skip).then(function (users) {
            res.render('admin/user_index',{
                userInfo:req.userInfo,
                users:users,

                count:count,
                pages:pages,
                limit:limit,
                page:page
            });
        });
    });
});

/*
* 分类首页
* */
router.get('/category',function (req, res) {

    var page=Number(req.query.page ||1);
    var limit=10;
    var skip=(page-1)*limit;
    var pages=0;

    Category.count().then(function (count) {
        //计算总页数
        pages=Math.ceil(count/limit);
        //取值不能超过pages，page大于pages取pages
        page=Math.min(page,pages);
        //取值不能小于1,page小于1取1
        page=Math.max(page,1);

        //sort()排序方法，1：升序 -1：降序
        Category.find().sort({_id:-1}).limit(limit).skip(skip).then(function (categories) {
            res.render('admin/category_index',{
                userInfo:req.userInfo,
                categories:categories,

                count:count,
                pages:pages,
                limit:limit,
                page:page
            });
        });
    });
});

/*
 * 分类添加
 * */
router.get('/category/add',function (req, res) {
    res.render('admin/category_add',{
        userInfo:req.userInfo
    })
});

/*
 * 分类保存
 * */
router.post('/category/add',function (req, res) {
    var name=req.body.name||'';

    if(name===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'名称不能为空'
        });
        return;
    }

    //数据库中是否存在同名分类名称
    Category.findOne({
        name:name
    }).then(function (rs) {
       if(rs){
            //数据库已经存在这个分类
           res.render('admin/error',{
               userInfo:req.userInfo,
               message:'分类已经存在'
           });
           return Promise.reject();
       }else {
           //数据库不存在，可以保存
           return new Category({
               name:name
           }).save();
       }
    }).then(function (newCategory) {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'分类保存成功',
            url:'/admin/category'
        });
    })
});

/*
 * 分类修改
 * */
router.get('/category/edit',function (req, res) {
    //获取要修改的信息，并且用表单的形式展现出来
    var id=req.query.id||'';

    //获取要修改的信息
    Category.findOne({
        _id:id
    }).then(function (category) {
        if(!category){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
            return Promise.reject();
        }else {
            res.render('admin/category_edit',{
                userInfo:req.userInfo,
                category:category
            });
        }
    })
});

/*
 * 分类修改后保存
 * */
router.post('/category/edit',function (req, res) {
    //获取要修改的信息，并且用表单的形式展现出来
    var id=req.query.id||'';
    var name = req.body.name||'';

    //获取要修改的信息
    Category.findOne({
        _id:id
    }).then(function (category) {
        if(!category){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'分类信息不存在'
            });
            return Promise.reject();
        }else {
            //当用户没有做任何修改
            if (name===category.name){
                res.render('admin/success',{
                    userInfo:req.userInfo,
                    message:'修改成功',
                    url:'/admin/category'
                });
            }else {
                //要修改的名称在数据库中是否存在
                return Category.findOne({
                    _id:{$ne:id},
                    name:name
                });
            }
        }
    }).then(function (sameCategory) {
        if (sameCategory){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'已经存在同名分类'
            });
            return Promise.reject();
        }else {
            //要修改的名称在数据库中不存在则保存
            return Category.update({
                _id:id
            },{
                name:name
            });
        }
    }).then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'修改成功',
            url:'/admin/category'
        });
    })
});

/*
 * 分类删除
 * */
router.get('/category/delete',function (req, res) {
    //获取要删除分类的信息
    var id=req.query.id||'';

    Category.remove({
        _id:id
    }).then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'删除成功',
            url:'/admin/category'
        });
    })
});


/*
 * 内容首页
 * */
router.get('/content',function (req, res) {
    var page=Number(req.query.page ||1);
    var limit=10;
    var skip=(page-1)*limit;
    var pages=0;

    Content.count().then(function (count) {
        //计算总页数
        pages=Math.ceil(count/limit);
        //取值不能超过pages，page大于pages取pages
        page=Math.min(page,pages);
        //取值不能小于1,page小于1取1
        page=Math.max(page,1);

        //sort()排序方法，1：升序 -1：降序
        Content.find().sort({addTime:-1}).limit(limit).skip(skip).populate(['category','user']).then(function (contents) {
            res.render('admin/content_index',{
                userInfo:req.userInfo,
                contents:contents,

                count:count,
                pages:pages,
                limit:limit,
                page:page
            });
        });
    });
});

/*
 * 内容添加
 * */
router.get('/content/add',function (req, res) {
    //读取所有分类信息
    Category.find().sort({_id:-1}).then(function (categories) {
        res.render('admin/content_add',{
            userInfo:req.userInfo,
            categories:categories
        });
    });
});

/*
 * 内容保存
 * */
router.post('/content/add',function (req, res) {
    //简单验证
    if(req.body.category===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客分类不能为空'
        });
    }

    if(req.body.title===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客标题不能为空'
        });
    }

    if(req.body.description===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客简介不能为空'
        });
    }

    if(req.body.content===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客内容不能为空'
        });
    }

    //保存博客到数据库
    new Content({
        category:req.body.category,
        title:req.body.title,
        user:req.userInfo._id.toString(),
        description:req.body.description,
        content:req.body.content
    }).save().then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'博客保存成功',
            url:'/admin/content'
        });
    })
});


/*
 * 内容修改
 * */
router.get('/content/edit',function (req, res) {
    //获取要修改的信息，并且用表单的形式展现出来
    var id=req.query.id||'';

    var categories=[];

    //读取所有分类信息
    Category.find().sort({_id:1}).then(function (recategories) {

        categories=recategories;

        //获取要修改的信息
        return Content.findOne({
            _id:id
        })
    }).then(function (content) {
        if(!content){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'博客不存在'
            });
            return Promise.reject();
        }else {
            res.render('admin/content_edit',{
                userInfo:req.userInfo,
                categories:categories,
                content:content
            });
        }
    })
});

/*
 * 内容修改后保存
 * */
router.post('/content/edit',function (req, res) {
    //获取要修改的信息，并且用表单的形式展现出来
    var id=req.query.id||'';

    var category = req.body.category||'';
    var title = req.body.title||'';
    var description = req.body.description||'';
    var content = req.body.content||'';

    if(req.body.category===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客分类不能为空'
        });
    }

    if(req.body.title===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客标题不能为空'
        });
    }

    if(req.body.description===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客简介不能为空'
        });
    }

    if(req.body.content===''){
        res.render('admin/error',{
            userInfo:req.userInfo,
            message:'博客内容不能为空'
        });
    }

    //获取要修改的信息
    Content.findOne({
        _id:id
    }).then(function (content) {
        if(!content){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'博客不存在'
            });
            return Promise.reject();
        }else {
            //当用户没有做任何修改
            if (category===content.category&&title===content.title&&description===content.description&&content===content.content){
                res.render('admin/success',{
                    userInfo:req.userInfo,
                    message:'修改成功',
                    url:'/admin/content'
                });
            }else {
                //要修改的名称在数据库中是否存在
                return Category.findOne({
                    _id:{$ne:id},
                    title:title
                });
            }
        }
    }).then(function (sameContent) {
        if (sameContent){
            res.render('admin/error',{
                userInfo:req.userInfo,
                message:'已经存在同名博客'
            });
            return Promise.reject();
        }else {
            //要修改的名称在数据库中不存在则保存
            return Content.update({
                _id:id
            },{
                category:req.body.category,
                title:req.body.title,
                description:req.body.description,
                content:req.body.content
            });
        }
    }).then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'修改成功',
            url:'/admin/content'
        });
    })
});

/*
 * 内容删除
 * */
router.get('/content/delete',function (req, res) {
    //获取要删除内容的信息
    var id=req.query.id||'';

    Content.remove({
        _id:id
    }).then(function () {
        res.render('admin/success',{
            userInfo:req.userInfo,
            message:'删除成功',
            url:'/admin/content'
        });
    })
});

module.exports=router;